home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / wb / czesc_4 / viruscheck / checkarc1_10.lha / CheckArcUk.vzrx < prev   
Text File  |  1996-10-24  |  11KB  |  270 lines

  1. /*
  2.    $VER: CheckArcUk.vzrx 1.1 (24.10.96)
  3.          © 1996 by Jean-Philippe MISTROT
  4. */
  5.  
  6. Trace OFF
  7.  
  8. /* External Programs */
  9.     Prog_VirusZ = 'UTILITAIRES:SHAREWARE/VIRUSZ/VirusZ'
  10.     Prog_Lha =    'C:Lha'
  11.     Prog_Lzx =    'C:Lzx'
  12.     Prog_Dms =    'C:Dms' /* A registered version is needed for physical error checking */
  13.     Prog_Zip =    'C:Unzip'
  14.     Prog_Rar =    'C:Unrar'
  15.  
  16. /* CheckArcUk.vzrx needs the following files */
  17.     ListeProbleme = 'RAM:CheckArc.Problems'
  18.     Liste1 =        'RAM:CheckArc.ArchivesList1'
  19.     Liste2 =        'RAM:CheckArc.ArchivesList2'
  20.     SortieDMS =     'RAM:CheckArc.DMSOutput'
  21.  
  22. /* Variable initializations */
  23.     TempPath =     'T:CheckArcTMP' /* THIS PATH WILL BE RECURSIVELY ERASED AT THE END OF THE SCRIPT */
  24.     TempPath2 =    'blabla'
  25.     TempPathDMS =  'RAD1:'
  26.     UseQuitFlag =  'no'
  27.     NomParDefaut = 'ProblemsList'
  28.     Symbole =      '›32m->›31m'
  29.  
  30. AddLib('rexxreqtools.library',5,-30)
  31. IF rc = 0 THEN DO
  32.     SAY 'CheckArcUk.vzrx needs RexxReqTools.library...'
  33.     EXIT
  34. END
  35. AddLib('rexxsupport.library',5,-30)
  36. IF rc = 0 THEN DO
  37.     SAY 'Veuillez vous procurer la RexxSupport.library...'
  38.     EXIT
  39. END
  40. IF Right(TempPath,1) = ':' THEN DO
  41.     SAY 'CheckArcUk.vzrx needs a temporary directory.'
  42.     SAY ''TempPath', is not enough !!!'
  43.     EXIT
  44. END
  45. IF Length(Symbole) > 29 | Length(Symbole) < 1 THEN DO
  46.     SAY 'The symbol must have by 1 to 29 characters !!!'
  47.     EXIT
  48. END
  49. IF Right(TempPath,1) = '/' THEN TempPath = DelStr(TempPath,Length(TempPath))
  50.  
  51. PARSE ARG Argument
  52.  
  53. IF Argument = '' THEN DO
  54.     Choix = rtezrequest('What do you want to check ?','Directory|Archive')
  55.     IF Choix = 1 THEN Argument = rtfilerequest(,,'Select a directory...',,'rtfi_flags = freqf_nofiles')
  56.     ELSE Argument = rtfilerequest(,,'Select an archive...',,'rtfi_flags = freqf_patgad rtfi_matchpat = (#?.lha|#?.lzh|#?.lzx|#?.run|#?.dms|#?.zip|#?.rar)')
  57. END
  58. IF rtresult = 0 THEN EXIT
  59.  
  60. IF Pos('"',Argument) ~= 0 THEN Argument = COMPRESS(Argument,'"')
  61. IF ~Exists(Argument) THEN DO
  62.     SAY 'The Argument is incorrect !!!'
  63.     EXIT
  64. END
  65.  
  66. IF SubStr(STATEF(Argument),1,3) = 'DIR' THEN DO
  67.     ADDRESS command 'C:List >"'Liste2'" "'Argument'" P=(*.lha|*.lzh|*.lzx|*.dms|*.run|*.zip|*.rar) FILES LFORMAT "%P%S" ALL'
  68.     IF rc ~= 0 THEN DO
  69.         SAY 'A problem occurs : list creation failed !!!'
  70.         EXIT
  71.     END
  72. END
  73. ELSE DO
  74.     IF Right(UPPER(Argument),4) = '.LHA' | Right(UPPER(Argument),4) = '.LZH' | Right(UPPER(Argument),4) = '.LZX' | Right(UPPER(Argument),4) = '.DMS' | Right(UPPER(Argument),4) = '.RUN' | Right(UPPER(Argument),4) = '.ZIP' | Right(UPPER(Argument),4) = '.RAR' THEN DO
  75.         ArcToCheck = Argument
  76.         CALL Recursivite
  77.         CALL DeleteTemp
  78.         CALL QuitVirusZ
  79.     END
  80.     SAY 'Use : Rx CheckArcUk.vzrx (ARC|CHEMIN)'
  81.     EXIT
  82. END
  83.  
  84. IF SubStr(STATEF(Liste2),6,1) = '0' THEN DO
  85.     SAY 'Your path doesn''t contain archive !!!'
  86.     ADDRESS command 'C:Delete >NIL: "'Liste2'" QUIET'
  87.     EXIT
  88. END
  89. ADDRESS command 'C:Sort >NIL: "'Liste2'" "'Liste2'"'
  90. Open('Liste2',Liste2,'R')
  91. DO WHILE ~eof('Liste2')
  92.     ArcToCheck = ReadLn('Liste2')
  93.     IF ArcToCheck ~= '' THEN DO
  94.         TempPath2 = 'blabla'
  95.         CALL Recursivite
  96.         CALL DeleteTemp
  97.     END
  98. END
  99. Close('Liste2')
  100. ADDRESS command 'C:Delete >NIL: "'Liste2'" QUIET'
  101. CALL QuitVirusZ
  102.  
  103. Recursivite:
  104.     DO WHILE TempPath2 ~= TempPath
  105.         IF ArcToCheck ~= '' THEN CALL Decompresse
  106.         IF Pos(TempPath,ArcToCheck) ~= 0 THEN ADDRESS command 'C:Delete >NIL: "'ArcToCheck'" QUIET FORCE'
  107.         ADDRESS command 'C:List >"'Liste1'" "'TempPath2'" P=(*.lha|*.lzh|*.lzx|*.dms|*.run|*.zip|*.rar) FILES LFORMAT "%P%S" ALL'
  108.         IF rc ~= 0 THEN DO
  109.             IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
  110.             WriteLn('ListeProbleme','ERROR !!! during recursive examination of directory  'TempPath2'')
  111.             RETURN
  112.         END
  113.         Open('Liste1',Liste1,'R')
  114.         ArcToCheck = ReadLn('Liste1')
  115.         Close('Liste1')
  116.         IF ArcToCheck = '' THEN DO
  117.             SAY TempPath2
  118.             CALL CheckVirus
  119.             ADDRESS command 'C:Delete >NIL: "'TempPath2'" ALL QUIET FORCE'
  120.             TempPath2 = DelStr(TempPath2,LastPos('/',TempPath2))
  121.         END
  122.     END
  123.     RETURN
  124.  
  125. CheckVirus:
  126.     IF ~show(ports,VIRUSZ_II.REXX) THEN DO
  127.         SAY 'Starting VirusZ...'
  128.         ADDRESS command '"'Prog_VirusZ'"'
  129.         StartTime = Time(seconds)
  130.         DO WHILE ~show(ports,VIRUSZ_II.REXX)
  131.             IF Time(seconds) - StartTime > 20 THEN DO
  132.                 SAY 'ERROR loading VirusZ !!!'
  133.                 EXIT
  134.             END
  135.         END
  136.     END
  137.  
  138.     IF Exists(TempPath2) THEN DO
  139.         SAY '   Verifying archive...'
  140.         ADDRESS VIRUSZ_II.REXX CHECKDIR '"'TempPath2'"' DECREXEC DECRDATA
  141.         IF rc = 0 THEN SAY '   Archive is clean.'
  142.         IF rc = 5 THEN DO
  143.             IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
  144.             WriteLn('ListeProbleme','›32mVIRUS›31m located in                                     'TempPath2'')
  145.         END
  146.         IF rc = 10 THEN DO
  147.             IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
  148.             WriteLn('ListeProbleme','ERROR !!! checking archive            'TempPath2'')
  149.         END
  150.     END
  151.     RETURN
  152.  
  153. Decompresse:
  154.     IF Pos('/',ArcToCheck) = 0 THEN
  155.         IF Pos(':',ArcToCheck) = 0 THEN NomArchive = ArcToCheck
  156.         ELSE NomArchive = SubStr(ArcToCheck,Pos(':',ArcToCheck)+1)
  157.     ELSE NomArchive = SubStr(ArcToCheck,LastPos('/',ArcToCheck)+1)
  158.     IF Length(NomArchive) > 29-Length(Symbole) THEN NomArchive = SubStr(NomArchive,1,29-Length(Symbole))
  159.     IF Pos(TempPath,ArcToCheck) = 0 THEN TempPath2 = ''TempPath'/'Symbole''NomArchive''
  160.     ELSE TempPath2 = ''SubStr(ArcToCheck,1,LastPos('/',ArcToCheck))''Symbole''NomArchive''
  161.  
  162.     IF Right(UPPER(ArcToCheck),4) = '.LHA' | Right(UPPER(ArcToCheck),4) = '.LZH' | Right(UPPER(ArcToCheck),4) = '.RUN' THEN DO
  163.         IF ~EXISTS(TempPath) THEN ADDRESS command 'C:MakeDir >NIL: "'TempPath'"'
  164.         ADDRESS command 'C:MakeDir >NIL: "'TempPath2'"'
  165.         ADDRESS command '"'Prog_Lha'" >NIL: -M x "'ArcToCheck'" "'TempPath2'/"'
  166.         IF rc ~= 0 THEN DO
  167.             IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
  168.             WriteLn('ListeProbleme','ERROR !!! extracting                                 'ArcToCheck'')
  169.         END
  170.         RETURN
  171.     END
  172.     IF Right(UPPER(ArcToCheck),4) = '.LZX' THEN DO
  173.         ADDRESS command '"'Prog_Lzx'" >NIL: x "'ArcToCheck'" "'TempPath2'/"'
  174.         IF rc ~= 0 THEN DO
  175.             IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
  176.             WriteLn('ListeProbleme','ERROR !!! extracting                                 'ArcToCheck'')
  177.         END
  178.         RETURN
  179.     END
  180.     IF Right(UPPER(ArcToCheck),4) = '.DMS' THEN DO
  181.         ADDRESS command '"'Prog_Dms'" <NIL: >"'SortieDMS'" WRITE "'ArcToCheck'" TO 'TempPathDms' NOTEXT'
  182.         IF rc ~= 0 THEN DO
  183.             IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
  184.             WriteLn('ListeProbleme','ERROR !!! extracting                                 'ArcToCheck'')
  185.         END
  186.         Open('SortieDMS',SortieDMS,'R')
  187.         DO WHILE ~eof('SortieDMS')
  188.             Ligne = ReadLn('SortieDMS')
  189.             IF Pos('READ ERRORS:',Ligne) ~= 0 THEN DO
  190.                 Compteur1 = Pos(':',Ligne)+3
  191.                 Compteur2 = Pos(':',Ligne,Compteur1)+3
  192.                 IF SubStr(Ligne,Compteur1,1) ~= '0' | SubStr(Ligne,Compteur2,1) ~= '0' THEN DO
  193.                     IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
  194.                     WriteLn('ListeProbleme',''SubStr(Ligne,2)'                   'ArcToCheck'')
  195.                 END
  196.             END
  197.         END
  198.         Close('SortieDMS')
  199.         ADDRESS command 'C:Delete >NIL: "'SortieDMS'" QUIET'
  200.         IF ~EXISTS(TempPath) THEN ADDRESS command 'C:MakeDir >NIL: "'TempPath'"'
  201.         ADDRESS command 'C:MakeDir >NIL: "'TempPath2'"'
  202.         ADDRESS command 'C:Copy >NIL: 'TempPathDMS' TO "'TempPath2'" ALL QUIET'
  203.         IF rc ~= 0 THEN DO
  204.             IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
  205.             WriteLn('ListeProbleme','ERROR !!! copying files from 'TempPathDMS'                   'ArcToCheck'')
  206.         END
  207.         ADDRESS command 'C:Dir >NIL: 'TempPathDMS''
  208.         IF rc ~= 0 THEN DO
  209.             IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
  210.             WriteLn('ListeProbleme','Not a DOS disk in 'TempPathDMS'                              'ArcToCheck'')
  211.         END
  212.         RETURN
  213.     END
  214.     IF Right(UPPER(ArcToCheck),4) = '.ZIP' THEN DO
  215.         IF ~EXISTS(TempPath) THEN ADDRESS command 'C:MakeDir >NIL: "'TempPath'"'
  216.         ADDRESS command '"'Prog_Zip'" >NIL: "'ArcToCheck'" -d "'TempPath2'"'
  217.         IF rc ~= 0 THEN DO
  218.             IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
  219.             WriteLn('ListeProbleme','ERROR !!! extracting                                 'ArcToCheck'')
  220.         END
  221.         RETURN
  222.     END
  223.     IF Right(UPPER(ArcToCheck),4) = '.RAR' THEN DO
  224.         ADDRESS command '"'Prog_Rar'" >NIL: x "'ArcToCheck'" "'TempPath2'/"'
  225.         IF rc ~= 0 THEN DO
  226.             IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
  227.             WriteLn('ListeProbleme','ERROR !!! extracting                                 'ArcToCheck'')
  228.         END
  229.     END
  230.     RETURN
  231.  
  232. DeleteTemp:
  233.     ADDRESS command 'C:Delete >NIL: "'Liste1'" QUIET'
  234.     IF Exists(TempPath) THEN DO
  235.         SAY '   Deleting temporary directory...'
  236.         ADDRESS command 'C:Delete >NIL: "'TempPath'" ALL QUIET FORCE'
  237.         IF rc ~= 0 THEN DO
  238.             SAY '   ERROR deleting temporary directory !!!'
  239.             CALL QuitVirusZ
  240.         END
  241.     END
  242.     RETURN
  243.  
  244. QuitVirusZ:
  245.     IF UPPER(UseQuitFlag) = 'YES' THEN DO
  246.         SAY 'Quitting VirusZ...'
  247.         ADDRESS VIRUSZ_II.REXX QUIT
  248.     END
  249.     IF Exists(ListeProbleme) THEN DO
  250.         Close('ListeProbleme')
  251.         Open('ListeProbleme',ListeProbleme,'R')
  252.         SAY ''
  253.         SAY '*** PROBLEMS LIST ***'
  254.         DO WHILE ~eof('ListeProbleme')
  255.             SAY '   'ReadLn('ListeProbleme')
  256.         END
  257.         Close('ListeProbleme')
  258.         Choix = rtezrequest('Do you want to save the report ?','Yes|No')
  259.         IF Choix = 1 THEN DO
  260.             IF Pos('/',Argument) = 0 THEN
  261.                 IF Pos(':',Argument) = 0 THEN Repertoire = ''
  262.                 ELSE Repertoire = SubStr(Argument,1,Pos(':',Argument))
  263.             ELSE Repertoire = SubStr(Argument,1,LastPos('/',Argument))
  264.             Fichier = rtfilerequest(Repertoire,NomParDefaut,'Select a file...')
  265.             ADDRESS command 'C:Copy >NIL: "'ListeProbleme'" "'Fichier'"'
  266.         END
  267.         ADDRESS command 'C:Delete >NIL: "'ListeProbleme'" QUIET'
  268.     END
  269.     EXIT
  270.